package com.ryskoo.catering.productcate.service;

import com.ryskoo.catering.productcate.domain.ProductCategoryPO;
import com.ryskoo.framework.core.bean.QueryMessageDTO;
import com.ryskoo.framework.core.service.IBasicService;

import java.util.List;

public interface IProductCategoryService extends IBasicService<ProductCategoryPO> {

    /**
     * 根据商户id查询菜品分类
     *
     * @return
     */
    List<ProductCategoryPO> getListByVendorId(String vendorId);

    /**
     * 根据商户uuid和分类名称查询数据
     * 用于在创建商品分类前，校验
     *
     * @param name
     * @param vendorId
     * @return
     */
    List<String> getUuidsByNameAndVendorId(String name, String vendorId);

    /**
     * 根据商户uuid和分类名称查询数据
     * 用于在更新商品分类前，校验
     *
     * @param name
     * @param vendorId
     * @param uuid
     * @return
     */
    List<String> getUuidsByNameAndVendorIdForUpdate(String name, String vendorId, String uuid);

    /**
     * 更改分类启用状态
     *
     * @param uuids
     * @param status
     */
    void changeStatus(List<String> uuids, boolean status);

    /**
     * 分类排序上移
     *
     * @param uuid
     */
    ProductCategoryPO up(String uuid);

    /**
     * 分类排序下移
     *
     * @param uuid
     */
    ProductCategoryPO down(String uuid);

    /**
     * 获取该商户下最大的position值
     *
     * @param vendorUuid
     * @return
     */
    int getMaxPosition(String vendorUuid);

    /**
     * 从ES中查询商品分类信息
     *
     * @param qm
     * @return
     */
    List<ProductCategoryPO> queryFromES(QueryMessageDTO qm);

    /**
     * 从ES查询商品分类总数
     *
     * @param qm
     * @return
     */
    int getCountFromES(QueryMessageDTO qm);

    /**
     * 同步商品分类信息到ES
     *
     * @param qm
     */
    void syncCategoryToES(QueryMessageDTO qm);

    /**
     * 删除ES里商品分类信息
     *
     * @param idList
     */
    void deleteCategoryFromES(List<String> idList);
}
